
/***
 * @Description: 主要完成定长的环形消息队列的初始化，读取消息队列和发送消息队列
 * @Author: Liverpool
 * @Date: 2024-03-03 15:16:53
 * @LastEditTime: 2024-03-03 15:20:41
 * @LastEditors: Liverpool
 */

#ifndef FIX_QUEUE_H
#define FIX_QUEUE_H

#include "system.h"
#include "locker.h"
#include "debug.h"
// 借鉴生产者消费者的环形数据结构、
typedef struct _fix_queue_t
{
    int size;              // 该消息队列中的容量
    int read_index;        // 该消息队列中读取的索引号
    int write_index;       // 该消息队列中写入的索引号
    int cnt;               // 消息队列中剩余的消息个数
    void **buffer;         // 指向不同的消息数组的指针
    D_Locker locker;       // 消息队列的锁
    sys_sem_t receive_sem; // 读线程的信号量
    sys_sem_t send_sem;    // 写线程的信号量
} D_FixQueue;

net_err_t fix_queue_init(D_FixQueue *queue, void **buffer, int size, D_LockerType locker_type); // 对定长的环形消息队列进行初始化
net_err_t fix_queue_send(D_FixQueue *queue, void *message, int ms);                             // 立即向消息队列发送消息
void *fix_queue_receive(D_FixQueue *queue, int ms);                                             // 从消息队列中取出相应的消息数据
void fix_queue_destroy(D_FixQueue *queue);                                                      // 销毁消息队列
int fix_queue_get_count(D_FixQueue *queue);                                                     // 得到消息队列的元素个数
#endif                                                                                          // !FIX_QUEUE_H